package com.softeem.music_sys.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.softeem.music_sys.comm.Result;
import com.softeem.music_sys.entity.Admin;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.web.multipart.MultipartFile;

/**
 * 管理员Service接口
 */
public interface AdminService extends IService<Admin> {
    /**
     * 管理员注册
     * @param admin 管理员信息
     * @return 是否注册成功
     */
    boolean register(Admin admin);
    
    /**
     * 管理员登录
     * @param username 用户名
     * @param password 密码
     * @return 登录成功的管理员信息，null表示登录失败
     */
    Admin login(String username, String password);
    
    /**
     * 管理员注册（Controller调用）
     * @param admin 管理员信息
     * @return Result结果
     */
    Result registerAdmin(Admin admin);
    
    /**
     * 管理员登录（Controller调用）
     * @param username 用户名
     * @param password 密码
     * @return Result结果
     */
    Result loginAdmin(String username, String password);
    
    /**
     * 根据ID获取管理员信息
     * @param id 管理员ID
     * @return Result结果
     */
    Result getAdminById(Integer id);
    
    /**
     * 更新管理员信息
     * @param admin 管理员信息
     * @return Result结果
     */
    Result updateAdmin(Admin admin);
    
    /**
     * 删除管理员
     * @param id 管理员ID
     * @return Result结果
     */
    Result deleteAdmin(Integer id);
    
    /**
     * 获取管理员列表
     * @param page 页码
     * @param limit 每页数量
     * @return Result结果
     */
    Result getAdminList(Integer page, Integer limit);
    
    /**
     * 搜索管理员
     * @param username 用户名
     * @param page 页码
     * @param limit 每页数量
     * @return Result结果
     */
    Result searchAdmin(String username, Integer page, Integer limit);
    
    /**
     * 更新管理员状态
     * @param id 管理员ID
     * @param status 状态
     * @return Result结果
     */
    Result updateAdminStatus(Integer id, Integer status);
    
    /**
     * 上传音乐文件
     * @param file 文件
     * @return Result结果
     */
    Result uploadMusicFile(MultipartFile file);
    
    /**
     * 根据ID获取管理员信息（内部调用）
     * @param id 管理员ID
     * @return Admin对象
     */
    Admin getAdminByIdInternal(Integer id);
    
    /**
     * 更新管理员信息（内部调用）
     * @param admin 管理员信息
     * @return 是否更新成功
     */
    boolean updateAdminInternal(Admin admin);
    
    /**
     * 删除管理员（内部调用）
     * @param id 管理员ID
     * @return 是否删除成功
     */
    boolean deleteAdminInternal(Integer id);
    
    /**
     * 获取管理员列表（内部调用）
     * @param page 页码
     * @param limit 每页数量
     * @return Page对象
     */
    Page<Admin> getAdminListInternal(Integer page, Integer limit);
    
    /**
     * 搜索管理员（内部调用）
     * @param username 用户名
     * @param page 页码
     * @param limit 每页数量
     * @return Page对象
     */
    Page<Admin> searchAdminInternal(String username, Integer page, Integer limit);
    
    /**
     * 更新管理员状态（内部调用）
     * @param id 管理员ID
     * @param status 状态
     * @return 是否更新成功
     */
    boolean updateAdminStatusInternal(Integer id, Integer status);
}